const db = require('../sql/mySql')
// 密码加密 三方插件 
const bcryptjs = require('bcryptjs');

const { getToken } = require("../common/jwt");
/* */
// const { expressjwt } = require('express-jwt');
// const jwt = require('jsonwebtoken');
// const { secretKey, expiresIn } = require('../config');

// /**
//  * 用户信息注册
//  * @route POST /user/register
//  * @group user - Operations about user
//  * @param {string} userName.query.required - 请输入用户名
//  * @param {string} passWord.query.required - 请输入密码
//  * @returns {object} 200 - An array of user info
//  * @returns {Error}  default - Unexpected error
//  */ * @param {file} file.formData.required - 要上传的文件

//  path：表示参数是 URL 路径中的一部分。
// query：表示参数是 URL 查询字符串中的一部分。
// body：表示参数在请求体中以 JSON 格式发送。
// header：表示参数在请求头中发送。
//formData : 请求体发送
/**
 * 用户信息注册
 * @route POST /api/register
 * @group login - 注册
 * @param {string} userName.formData.required - 请输入用户名
 * @param {string} passWord.formData.required - 请输入密码
 * @returns {object} 200 - An array of user info
 * @returns {Error}  default - Unexpected error
 */
// 注册函数
exports.register = (req, res) => {
    //  获取客户端传过来的用户信息   
    const userInfo = req.body
    // 定义SQL 语句进行查询  查询用户名是否被占用
    const sql = 'select * from user where userName=?'
    // 正常是一个 所以省略[]  [userInfo.userName]  
    db.query(sql, userInfo.userName, (err, result) => {
        if (err) {
            return res.result(err)
        }
        // 用户名 被占用啦
        if (result.length > 0) {
            return res.result('用户名已被占用')
        }

        // TODO 用户名可以使用 把密码进行加密 返回值 是字符串bcryptjs.hashSync(明文密码,密码长度)
        userInfo.passWord = bcryptjs.hashSync(userInfo.passWord, 10)
        // 插入user表   这个 也可以  const sql = 'INSERT INTO user (name, email) VALUES (?, ?)';
        const setMql = 'insert into user set ?'
        // const setMql = 'INSERT user (userName, passWord) VALUES (?, ?)'
        // [userInfo.userName, userInfo.passWord]
        db.query(setMql, { userName: userInfo.userName, passWord: userInfo.passWord }, (error, results) => {
            if (error) {
                return res.result('注册失败')
            }
            if (results.affectedRows != 1) {
                return res.result('注册失败')
            }
            res.result('注册成功', 0)
        });

    })
}

/**
 * 用户登录
 * @route POST /api/login
 * @group login - 登录
 * @param {string} userName.formData.required - 请输入用户名
 * @param {string} passWord.formData.required - 请输入密码
 * @returns {object} 200 - An array of user info
 * @returns {Error}  default - Unexpected error
 */
// 登录 
exports.login = (req, res) => {
    const userInfo = req.body
    // 定义SQL 语句进行查询  查询用户名是否正确
    const sql = 'select * from user where userName=?'
    db.query(sql, userInfo.userName, (err, result) => {
        if (err) return res.result(err)
        // 用户名 被占用啦
        if (result.length != 1) return res.result('登录失败')
        // TODO : 判断密码是否与数据库的密码一致
        const flag = bcryptjs.compareSync(userInfo.passWord, result[0].passWord)
        if (!flag) return res.result('密码输入错误')

        // TODO :: 登录成功 生成token 并返回

        const user = { ...result[0], passWord: '', userPic: '' }

        const token = getToken({ ...user });
        // 将 Token 添加到请求头中
        res.send({ status: 0, message: "登陆成功", data: { token } })
    })
}


